package cn.cheniy.swiftmark.common.serializer;

import cn.cheniy.swiftmark.common.util.PrincipalUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * @author cheniy
 * @description 图片路径自动拼接为完整的 URL 地址【minio/阿里云OSS路径 + 图片相对路径】
 *  
 */
@Component
@RefreshScope
public class ImgJsonSerializer extends JsonSerializer<String> {

    @Value ("${biz.oss.resources-url}")
    private String imgDomain;

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 处理空值：若原始图片路径为空，直接写入空字符串
        if (StrUtil.isBlank(value)) {
            gen.writeString(StrUtil.EMPTY);
            return;
        }
        // 处理配置未生效：若基础域名未配置，直接写入原始路径
        else if (StrUtil.isBlank(imgDomain)) {
            gen.writeString(value);
            return;
        }

        // 分割多图片路径（假设图片路径用逗号分隔，如 "img1.jpg,img2.jpg"）
        String[] imgs = value.split(StrUtil.COMMA);
        StringBuilder sb = new StringBuilder();

        for (String img : imgs) {
            // 检查是否为HTTP/HTTPS协议开头（如 "https://example.com/img.jpg"）
            if (PrincipalUtil.isHttpProtocol(img)) {
                // 是完整URL，直接拼接
                sb.append(img).append(StrUtil.COMMA);
            } else {
                // 是相对路径，拼接基础域名（如 "https://oss.mall4j.com/" + "img1.jpg"）
                sb.append(imgDomain).append(img).append(StrUtil.COMMA);
            }
        }

        // 删除最后一个多余的逗号（如 "url1,url2," → "url1,url2"）
        sb.deleteCharAt(sb.length() - 1);
        gen.writeString(sb.toString());
    }
}
